error("Invalid value '%s' for SvcParam 'port'", svc_val_str);
goto err;
}
- _fallthrough;
+ _o_fallthrough;
case DNR_SVC_DOHPATH:
/* plain string */
return -1;
}
-static int avl_ipv4_cmp(const void *k1, const void *k2, _unused void *ptr)
+static int avl_ipv4_cmp(const void *k1, const void *k2, _o_unused void *ptr)
{
return memcmp(k1, k2, sizeof(struct in_addr));
}
}
}
-static int lease_cfg_cmp(const void *k1, const void *k2, _unused void *ptr)
+static int lease_cfg_cmp(const void *k1, const void *k2, _o_unused void *ptr)
{
const struct lease_cfg *lease_cfg1 = k1, *lease_cfg2 = k2;
int cmp = 0;
free_lease_cfg(lease_cfg);
}
-static void lease_cfg_update(_unused struct vlist_tree *tree, struct vlist_node *node_new,
+static void lease_cfg_update(_o_unused struct vlist_tree *tree, struct vlist_node *node_new,
struct vlist_node *node_old)
{
struct lease_cfg *lease_cfg_new = container_of(node_new, struct lease_cfg, node);
uloop_end();
}
-static void reload_cb(struct uloop_fd *u, _unused unsigned int events)
+static void reload_cb(struct uloop_fd *u, _o_unused unsigned int events)
{
char b[512];
if (read(u->fd, b, sizeof(b)) < 0) {}
};
void dhcpv4_handle_msg(void *src_addr, void *data, size_t len,
- struct interface *iface, _unused void *our_dest_addr,
+ struct interface *iface, _o_unused void *our_dest_addr,
send_reply_cb_t send_reply, void *opaque)
{
/* Request variables */
/* Handler for DHCPv4 messages */
static void dhcpv4_handle_dgram(void *addr, void *data, size_t len,
- struct interface *iface, _unused void *dest_addr)
+ struct interface *iface, _o_unused void *dest_addr)
{
int sock = iface->dhcpv4_event.uloop.fd;
char file[128];
uint32_t cookie;
uint8_t options[];
-} _packed;
+} _o_packed;
// RFC2131, §3
#define DHCPV4_MAGIC_COOKIE 0x63825363
uint32_t replay[2];
uint8_t type;
uint8_t key[16];
-} _packed;
+} _o_packed;
// https://www.iana.org/assignments/auth-namespaces/auth-namespaces.xhtml#auth-namespaces-1
enum dhcpv4_auth_protocol {
uint8_t code;
uint8_t len;
uint32_t data;
-} _packed;
+} _o_packed;
/* DNR */
struct dhcpv4_dnr {
uint16_t code;
uint16_t len;
uint8_t data[DUID_MAX_LEN];
- } _packed serverid = {
+ } _o_packed serverid = {
.code = htons(DHCPV6_OPT_SERVERID),
.len = 0,
.data = { 0 },
uint16_t code;
uint16_t len;
uint8_t data[DUID_MAX_LEN];
- } _packed clientid = {
+ } _o_packed clientid = {
.code = htons(DHCPV6_OPT_CLIENTID),
.len = htons(assign->duid_len),
.data = { 0 },
uint16_t code;
uint16_t len;
uint8_t id;
- } _packed message = {
+ } _o_packed message = {
.code = htons(DHCPV6_OPT_RECONF_MSG),
.len = htons(1),
.id = DHCPV6_MSG_RENEW,
return 0;
if (status) {
- struct __attribute__((packed)) {
+ struct _o_packed {
uint16_t type;
uint16_t len;
uint16_t val;
int buf_idx;
};
-static void dhcpv6_log_ia_addr(_unused struct dhcpv6_lease *lease, struct in6_addr *addr, int prefix,
- _unused uint32_t pref_lt, _unused uint32_t valid_lt, void *arg)
+static void dhcpv6_log_ia_addr(_o_unused struct dhcpv6_lease *lease, struct in6_addr *addr, int prefix,
+ _o_unused uint32_t pref_lt, _o_unused uint32_t valid_lt, void *arg)
{
struct log_ctxt *ctxt = (struct log_ctxt *)arg;
char addrbuf[INET6_ADDRSTRLEN];
uint32_t arch;
// Ready to send
- struct __attribute__((packed)) {
+ struct _o_packed {
uint16_t type; // In network endianess
uint16_t len; // In network endianess, without /0
char payload[]; // Null-terminated here
};
static ssize_t dhcpv6_4o6_send_reply(struct iovec *iov, size_t iov_len,
- _unused struct sockaddr *dest,
- _unused socklen_t dest_len,
+ _o_unused struct sockaddr *dest,
+ _o_unused socklen_t dest_len,
void *opaque)
{
struct dhcpv4_msg_data *reply = opaque;
debug("Got a DHCPv6-request on %s", iface->name);
/* Construct reply message */
- struct _packed {
+ struct _o_packed {
uint8_t msg_type;
uint8_t tr_id[3];
uint16_t serverid_type;
dest.serverid_length = htons(sizeof(duid_ll_hdr) + ETH_ALEN);
}
- struct _packed {
+ struct _o_packed {
uint16_t type;
uint16_t len;
uint8_t buf[DUID_MAX_LEN];
.buf = { 0 },
};
- struct __attribute__((packed)) {
+ struct _o_packed {
uint16_t type;
uint16_t len;
uint32_t value;
} maxrt = {htons(DHCPV6_OPT_SOL_MAX_RT), htons(sizeof(maxrt) - 4),
htonl(60)};
- struct __attribute__((packed)) {
+ struct _o_packed {
uint16_t type;
uint16_t len;
} rapid_commit = {htons(DHCPV6_OPT_RAPID_COMMIT), 0};
- struct __attribute__((packed)) {
+ struct _o_packed {
uint16_t type;
uint16_t len;
uint16_t value;
} stat = {htons(DHCPV6_OPT_STATUS), htons(sizeof(stat) - 4),
htons(DHCPV6_STATUS_USEMULTICAST)};
- struct __attribute__((packed)) {
+ struct _o_packed {
uint16_t type;
uint16_t len;
uint32_t value;
} search = {htons(DHCPV6_OPT_DNS_DOMAIN), htons(search_len)};
- struct __attribute__((packed)) dhcpv4o6_server {
+ struct _o_packed dhcpv4o6_server {
uint16_t type;
uint16_t len;
struct in6_addr addr;
#ifdef DHCPV4_SUPPORT
if (hdr->msg_type == DHCPV6_MSG_DHCPV4_QUERY) {
- struct _packed dhcpv4_msg_data {
+ struct _o_packed dhcpv4_msg_data {
uint16_t type;
uint16_t len;
uint8_t msg[1];
struct dhcpv6_client_header {
uint8_t msg_type;
uint8_t transaction_id[3];
-} __attribute__((packed));
+} _o_packed;
struct dhcpv6_relay_header {
uint8_t msg_type;
struct in6_addr link_address;
struct in6_addr peer_address;
uint8_t options[];
-} __attribute__((packed));
+} _o_packed;
struct dhcpv6_relay_forward_envelope {
uint8_t msg_type;
uint32_t interface_id_data;
uint16_t relay_message_type;
uint16_t relay_message_len;
-} __attribute__((packed));
+} _o_packed;
struct dhcpv6_auth_reconfigure {
uint16_t type;
uint32_t replay[2];
uint8_t reconf_type;
uint8_t key[16];
-} _packed;
+} _o_packed;
struct dhcpv6_ia_hdr {
uint16_t type;
uint32_t iaid;
uint32_t t1;
uint32_t t2;
-} _packed;
+} _o_packed;
struct dhcpv6_ia_prefix {
uint16_t type;
uint32_t valid_lt;
uint8_t prefix;
struct in6_addr addr;
-} _packed;
+} _o_packed;
struct dhcpv6_ia_addr {
uint16_t type;
struct in6_addr addr;
uint32_t preferred_lt;
uint32_t valid_lt;
-} _packed;
+} _o_packed;
struct dhcpv6_cer_id {
uint16_t type;
case NETEV_ADDR6_DEL:
add = false;
netlink_dump_neigh_table(false);
- _fallthrough;
+ _o_fallthrough;
case NETEV_ADDR6_ADD:
setup_addr_for_relaying(&info->addr.in6, iface, add);
break;
case NETEV_NEIGH6_DEL:
add = false;
- _fallthrough;
+ _o_fallthrough;
case NETEV_NEIGH6_ADD:
if (info->neigh.flags & NTF_PROXY) {
if (add) {
/* Handle solicitations */
static void handle_solicit(void *addr, void *data, size_t len,
- struct interface *iface, _unused void *dest)
+ struct interface *iface, _o_unused void *dest)
{
struct ip6_hdr *ip6 = data;
struct nd_neighbor_solicit *req = (struct nd_neighbor_solicit*)&ip6[1];
/* Handler for neighbor cache entries from the kernel. This is our source
* to learn and unlearn hosts on interfaces. */
-static int cb_rtnl_valid(struct nl_msg *msg, _unused void *arg)
+static int cb_rtnl_valid(struct nl_msg *msg, _o_unused void *arg)
{
struct nlmsghdr *hdr = nlmsg_hdr(msg);
int ret = NL_SKIP;
case RTM_NEWROUTE:
add = true;
- _fallthrough;
+ _o_fallthrough;
case RTM_DELROUTE:
ret = handle_rtm_route(hdr, add);
break;
case RTM_NEWADDR:
add = true;
- _fallthrough;
+ _o_fallthrough;
case RTM_DELADDR:
ret = handle_rtm_addr(hdr, add);
break;
case RTM_NEWNEIGH:
add = true;
- _fallthrough;
+ _o_fallthrough;
case RTM_DELNEIGH:
ret = handle_rtm_neigh(hdr, add);
break;
}
-static int cb_addr_finish(_unused struct nl_msg *msg, void *arg)
+static int cb_addr_finish(_o_unused struct nl_msg *msg, void *arg)
{
struct addr_info *ctxt = (struct addr_info *)arg;
}
-static int cb_addr_error(_unused struct sockaddr_nl *nla, struct nlmsgerr *err,
+static int cb_addr_error(_o_unused struct sockaddr_nl *nla, struct nlmsgerr *err,
void *arg)
{
struct addr_info *ctxt = (struct addr_info *)arg;
}
-static int cb_linklocal_finish(_unused struct nl_msg *msg, void *arg)
+static int cb_linklocal_finish(_o_unused struct nl_msg *msg, void *arg)
{
struct addr_info *ctxt = (struct addr_info *)arg;
}
-static int cb_linklocal_error(_unused struct sockaddr_nl *nla, struct nlmsgerr *err,
+static int cb_linklocal_error(_o_unused struct sockaddr_nl *nla, struct nlmsgerr *err,
void *arg)
{
struct addr_info *ctxt = (struct addr_info *)arg;
}
-static int cb_proxy_neigh_finish(_unused struct nl_msg *msg, void *arg)
+static int cb_proxy_neigh_finish(_o_unused struct nl_msg *msg, void *arg)
{
struct neigh_info *ctxt = (struct neigh_info *)arg;
}
-static int cb_proxy_neigh_error(_unused struct sockaddr_nl *nla, struct nlmsgerr *err,
+static int cb_proxy_neigh_error(_o_unused struct sockaddr_nl *nla, struct nlmsgerr *err,
void *arg)
{
struct neigh_info *ctxt = (struct neigh_info *)arg;
va_end(ap);
}
-static void sighandler(_unused int signal)
+static void sighandler(_o_unused int signal)
{
uloop_end();
}
}
/* Convenience function to receive and do basic validation of packets */
-static void odhcpd_receive_packets(struct uloop_fd *u, _unused unsigned int events)
+static void odhcpd_receive_packets(struct uloop_fd *u, _o_unused unsigned int events)
{
struct odhcpd_event *e = container_of(u, struct odhcpd_event, uloop);
#include <stdbool.h>
#include <syslog.h>
+#include <libubox/avl.h>
#include <libubox/blobmsg.h>
#include <libubox/list.h>
#include <libubox/uloop.h>
#define INFINITE_VALID(x) ((x) == 0)
-#define _unused __attribute__((unused))
-#define _packed __attribute__((packed))
-#define _fallthrough __attribute__((__fallthrough__))
+#ifndef _o_fallthrough
+#define _o_fallthrough __attribute__((__fallthrough__))
+#endif /* _o_fallthrough */
+
+#ifndef _o_packed
+#define _o_packed __attribute__((packed))
+#endif /* _o_packed */
+
+#ifndef _o_unused
+#define _o_unused __attribute__((unused))
+#endif /* _o_unused */
#define ALL_IPV6_NODES "ff02::1"
#define ALL_IPV6_ROUTERS "ff02::2"
void dhcpv4_free_lease(struct dhcpv4_lease *a);
int dhcpv4_setup_interface(struct interface *iface, bool enable);
void dhcpv4_handle_msg(void *addr, void *data, size_t len,
- struct interface *iface, _unused void *dest_addr,
+ struct interface *iface, _o_unused void *dest_addr,
send_reply_cb_t send_reply, void *opaque);
#else
static inline void dhcpv4_free_lease(struct dhcpv4_lease *lease) {
/* Event handler for incoming ICMPv6 packets */
static void handle_icmpv6(void *addr, void *data, size_t len,
- struct interface *iface, _unused void *dest)
+ struct interface *iface, _o_unused void *dest)
{
struct icmp6_hdr *hdr = data;
struct sockaddr_in6 *from = addr;
return true;
}
-static void statefiles_write_host6_cb(struct dhcpv6_lease *lease, struct in6_addr *addr, _unused int prefix,
- _unused uint32_t pref_lt, _unused uint32_t valid_lt, void *arg)
+static void statefiles_write_host6_cb(struct dhcpv6_lease *lease, struct in6_addr *addr, _o_unused int prefix,
+ _o_unused uint32_t pref_lt, _o_unused uint32_t valid_lt, void *arg)
{
struct write_ctxt *ctxt = (struct write_ctxt *)arg;
}
static void statefiles_write_state6_addr(struct dhcpv6_lease *lease, struct in6_addr *addr, int prefix,
- _unused uint32_t pref_lt, _unused uint32_t valid_lt, void *arg)
+ _o_unused uint32_t pref_lt, _o_unused uint32_t valid_lt, void *arg)
{
struct write_ctxt *ctxt = (struct write_ctxt *)arg;
char ipbuf[INET6_ADDRSTRLEN];
static struct ubus_request req_dump = { .list = LIST_HEAD_INIT(req_dump.list) };
#ifdef DHCPV4_SUPPORT
-static int handle_dhcpv4_leases(struct ubus_context *ctx, _unused struct ubus_object *obj,
- struct ubus_request_data *req, _unused const char *method,
- _unused struct blob_attr *msg)
+static int handle_dhcpv4_leases(struct ubus_context *ctx, _o_unused struct ubus_object *obj,
+ struct ubus_request_data *req, _o_unused const char *method,
+ _o_unused struct blob_attr *msg)
{
struct interface *iface;
time_t now = odhcpd_time();
}
#endif /* DHCPV4_SUPPORT */
-static void dhcpv6_blobmsg_ia_addr(_unused struct dhcpv6_lease *lease, struct in6_addr *addr, int prefix,
- uint32_t pref_lt, uint32_t valid_lt, _unused void *arg)
+static void dhcpv6_blobmsg_ia_addr(_o_unused struct dhcpv6_lease *lease, struct in6_addr *addr, int prefix,
+ uint32_t pref_lt, uint32_t valid_lt, _o_unused void *arg)
{
void *a = blobmsg_open_table(&b, NULL);
char *buf = blobmsg_alloc_string_buffer(&b, "address", INET6_ADDRSTRLEN);
blobmsg_close_table(&b, a);
}
-static int handle_dhcpv6_leases(_unused struct ubus_context *ctx, _unused struct ubus_object *obj,
- _unused struct ubus_request_data *req, _unused const char *method,
- _unused struct blob_attr *msg)
+static int handle_dhcpv6_leases(_o_unused struct ubus_context *ctx, _o_unused struct ubus_object *obj,
+ _o_unused struct ubus_request_data *req, _o_unused const char *method,
+ _o_unused struct blob_attr *msg)
{
struct interface *iface;
time_t now = odhcpd_time();
return 0;
}
-static int handle_ra_pio(_unused struct ubus_context *ctx, _unused struct ubus_object *obj,
- _unused struct ubus_request_data *req, _unused const char *method,
- _unused struct blob_attr *msg)
+static int handle_ra_pio(_o_unused struct ubus_context *ctx, _o_unused struct ubus_object *obj,
+ _o_unused struct ubus_request_data *req, _o_unused const char *method,
+ _o_unused struct blob_attr *msg)
{
char ipv6_str[INET6_ADDRSTRLEN];
time_t now = odhcpd_time();
return 0;
}
-static int handle_add_lease_cfg(_unused struct ubus_context *ctx, _unused struct ubus_object *obj,
- _unused struct ubus_request_data *req, _unused const char *method,
+static int handle_add_lease_cfg(_o_unused struct ubus_context *ctx, _o_unused struct ubus_object *obj,
+ _o_unused struct ubus_request_data *req, _o_unused const char *method,
struct blob_attr *msg)
{
if (!config_set_lease_cfg_from_blobmsg(msg))
[IFACE_ATTR_ADDRESS] = { .name = "ipv6-address", .type = BLOBMSG_TYPE_ARRAY },
};
-static void handle_dump(_unused struct ubus_request *req, _unused int type, struct blob_attr *msg)
+static void handle_dump(_o_unused struct ubus_request *req, _o_unused int type, struct blob_attr *msg)
{
struct blob_attr *tb[DUMP_ATTR_MAX];
blobmsg_parse(dump_attrs, DUMP_ATTR_MAX, tb, blob_data(msg), blob_len(msg));
}
-static int handle_update(_unused struct ubus_context *ctx, _unused struct ubus_object *obj,
- _unused struct ubus_request_data *req, _unused const char *method,
+static int handle_update(_o_unused struct ubus_context *ctx, _o_unused struct ubus_object *obj,
+ _o_unused struct ubus_request_data *req, _o_unused const char *method,
struct blob_attr *msg)
{
struct blob_attr *tb[IFACE_ATTR_MAX];
ubus_notify(ubus, &main_object, type, b.head, -1);
}
-static void handle_event(_unused struct ubus_context *ctx,
- _unused struct ubus_event_handler *ev,
- _unused const char *type, struct blob_attr *msg)
+static void handle_event(_o_unused struct ubus_context *ctx,
+ _o_unused struct ubus_event_handler *ev,
+ _o_unused const char *type, struct blob_attr *msg)
{
struct blob_attr *tb[OBJ_ATTR_MAX];
blobmsg_parse(obj_attrs, OBJ_ATTR_MAX, tb, blob_data(msg), blob_len(msg));